<

nullOk パラメータの削除

まとめ

この移行ガイドでは、nullOk複数のパラメータof使用する静的アクセサーと関連アクセサー null 許容の戻り値を持つ代替 API。

コンテクスト

Flutter には、いくつかのタイプのウィジェットのルックアップを可能にする共通のパターンがあります。 (InheritedWidgets) 通常呼び出される静的メンバー関数を使用するof、そして、BuildContext

null 非許容がデフォルトになる前は、これらを切り替えることができて便利でした。 ウィジェットが存在しない場合に例外のスローを切り替える API ウィジェット ツリーが見つからない場合は null を返します。役に立ちましたし、 すべての変数は null 値を許容できるため、混乱することはありませんでした。

null 非許容性がデフォルトになったときは、 最も一般的に使用される API は、NULL 非許容値を返します。こう言うからですMediaQuery.of(context, nullOk: false)そしてまだ必要です!オペレーター また?そして、その呼び出し後のフォールバック値は扱いにくいと感じました。

nullOkパラメーターは null 安全性切り替えを提供する安価な形式でした。 null 非許容性に対する真の言語サポートに直面して、当時は 開発者に対して冗長で、おそらく矛盾する信号を送信します。

これを解決するには、ofアクセサー (および同様に使用されるいくつかの関連アクセサー)nullOk) は 2 つの呼び出しに分割されました。1 つは null 非許容値を返し、もう 1 つは null 非許容値を返します。 必要なウィジェットが存在しない場合に例外をスローしました。 例外をスローしなかった null 許容値を返し、次の場合は null を返しました。 ウィジェットは存在しませんでした。

この変更の設計ドキュメントは次のとおりです。nullOk パラメータの削除

変更内容の説明

実際の変更では、これらの API が変更され、nullOkパラメータ、および null 非許容値を返します。

  • MediaQuery.of
  • Navigator.of
  • ScaffoldMessenger.of
  • Scaffold.of
  • Router.of
  • Localizations.localeOf
  • FocusTraversalOrder.of
  • FocusTraversalGroup.of
  • Focus.of
  • Shortcuts.of
  • Actions.handler
  • Actions.find
  • Actions.invoke
  • AnimatedList.of
  • SliverAnimatedList.of
  • CupertinoDynamicColor.resolve
  • CupertinoDynamicColor.resolveFrom
  • CupertinoUserInterfaceLevel.of
  • CupertinoTheme.brightnessOf
  • CupertinoThemeData.resolveFrom
  • NoDefaultCupertinoThemeData.resolveFrom
  • CupertinoTextThemeData.resolveFrom
  • MaterialBasedCupertinoThemeData.resolveFrom

そして、これらの新しい API をそれらと並行して導入しました。 null 許容値を返します。

  • MediaQuery.maybeOf
  • Navigator.maybeOf
  • ScaffoldMessenger.maybeOf
  • Scaffold.maybeOf
  • Router.maybeOf
  • Localizations.maybeLocaleOf
  • FocusTraversalOrder.maybeOf
  • FocusTraversalGroup.maybeOf
  • Focus.maybeOf
  • Shortcuts.maybeOf
  • Actions.maybeFind
  • Actions.maybeInvoke
  • AnimatedList.maybeOf
  • SliverAnimatedList.maybeOf
  • CupertinoDynamicColor.maybeResolve
  • CupertinoUserInterfaceLevel.maybeOf
  • CupertinoTheme.maybeBrightnessOf

移行ガイド

新しい形式の API を使用するようにコードを変更するには、すべての API を変換します。 以下を含む呼び出しのインスタンスnullOk = trueを使用するパラメータとしてmaybe代わりに API の形式を使用します。

したがって、この:

MediaQueryData? data = MediaQuery.of(context, nullOk: true);

は次のようになります:

MediaQueryData? data = MediaQuery.maybeOf(context);

また、API を呼び出すすべてのインスタンスを次のように変更する必要があります。nullOk = false(多くの場合デフォルト)、null 非許容の戻り値を受け入れるか、任意の戻り値を削除します。!演算子:

したがって、次のいずれかになります。

MediaQueryData data = MediaQuery.of(context)!; // nullOk false by default.
MediaQueryData? data = MediaQuery.of(context); // nullOk false by default.

どちらも次のようになります。

MediaQueryData data = MediaQuery.of(context); // No ! or ? operator here now.

unnecessary_non_null_assertion分析オプションは、次のような場合に非常に役立ちます。 場所を見つける!演算子を削除する必要があります。unnecessary_nullable_for_final_variable_declarations分析オプションは次のとおりです 不要な疑問符演算子を見つけるのに役立ちますfinalconst変数。

タイムライン

リリースされたバージョン: 1.24.0
安定版リリース: 2.0.0

参考文献

API ドキュメント:

  • MediaQuery.of
  • Navigator.of
  • ScaffoldMessenger.of
  • Scaffold.of
  • Router.of
  • Localizations.localeOf
  • FocusTraversalOrder.of
  • FocusTraversalGroup.of
  • Focus.of
  • Shortcuts.of
  • Actions.handler
  • Actions.find
  • Actions.invoke
  • AnimatedList.of
  • SliverAnimatedList.of
  • CupertinoDynamicColor.resolve
  • CupertinoDynamicColor.resolveFrom
  • CupertinoUserInterfaceLevel.of
  • CupertinoTheme.brightnessOf
  • CupertinoThemeData.resolveFrom
  • NoDefaultCupertinoThemeData.resolveFrom
  • CupertinoTextThemeData.resolveFrom
  • MaterialBasedCupertinoThemeData.resolveFrom
  • MediaQuery.maybeOf
  • Navigator.maybeOf
  • ScaffoldMessenger.maybeOf
  • Scaffold.maybeOf
  • Router.maybeOf
  • Localizations.maybeLocaleOf
  • FocusTraversalOrder.maybeOf
  • FocusTraversalGroup.maybeOf
  • Focus.maybeOf
  • Shortcuts.maybeOf
  • Actions.maybeFind
  • Actions.maybeInvoke
  • AnimatedList.maybeOf
  • SliverAnimatedList.maybeOf
  • CupertinoDynamicColor.maybeResolve
  • CupertinoUserInterfaceLevel.maybeOf
  • CupertinoTheme.maybeBrightnessOf

関連する問題:

  • 問題 68637

関連する PR:

  • 削除nullOkMediaQuery.of
  • 削除nullOkNavigator.of
  • 削除nullOkからのパラメータAnimatedList.ofSliverAnimatedList.of
  • 削除nullOkからのパラメータShortcuts.ofActions.find、 とActions.handler
  • 削除nullOkからのパラメータFocus.ofFocusTraversalOrder.of、 とFocusTraversalGroup.of
  • 削除nullOkからのパラメータLocalizations.localeOf
  • 削除nullOkからのパラメータRouter.of
  • 削除nullOkからScaffold.ofScaffoldMessenger.of
  • 削除nullOkクパチーノ色解像度 API のパラメータ
  • 痕跡を除去するnullOkからのパラメータLocalizations.localeOf
  • 削除nullOkからActions.invoke、 追加Actions.maybeInvoke
b59c86c5-2c2c-4ec4-アッベ-b6c334b61132